package com.jy.wms.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.dao.WmsOrderRepairDetailedMapper;
import com.jy.wms.dao.WmsStockMapper;
import com.jy.wms.pojo.WmsOrderRepairDetailed;
import com.jy.wms.pojo.WmsStock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;

/**
* @ClassName: WmsOrderRepairDetailedService.java
* @Description: TODO(这里用一句话描述这个类的作用)
* @Author LH
* @Date Mon Nov 13 09:23:25 GMT+08:00 2017
*/

@Service
public class WmsOrderRepairDetailedService extends BaseService<WmsOrderRepairDetailedMapper,WmsOrderRepairDetailed> {

    @Autowired
    private WmsStockMapper wmsStockMapper;
 /**
 * 插入一条记录
 * @param entity 实体对象
 * @return int
 */
public Integer baseInsert(WmsOrderRepairDetailed entity){
     return dao.baseInsert( entity );
}

/**
* 插入一条记录（匹配有值的字段）
* @param entity 实体对象
* @return int
*/
public Integer baseInsertSelective(WmsOrderRepairDetailed entity){
     return dao.baseInsertSelective( entity);
}

/**
* 删除（根据主键ID删除）
* @param id 主键
* @return int
*/
public Integer baseDeleteByPrimaryKey(String id){
     return dao.baseDeleteByPrimaryKey( id);
}

/**
* 删除（根据ID 批量删除）
* @param idList 主键ID列表
* @return int
*/
public Integer baseDeleteBathPrimaryKeys(List<String> idList){
     return dao.baseDeleteBathPrimaryKeys( idList );
}

/**
* 分页查询
* @param entity 实体
* @return Page<WmsOrderRepairDetailed>
*/
public Page<WmsOrderRepairDetailed> baseSelectPage(WmsOrderRepairDetailed entity ){
    PageHelper.startPage(entity.getPage(),entity.getRows());
    return (Page<WmsOrderRepairDetailed>)dao.baseSelectPage( entity );
}

/**
* 查询（根据主键ID查询）
* @param id 主键ID
* @return WmsOrderRepairDetailed
*/
public WmsOrderRepairDetailed baseSelectByPrimaryKey(String id ){
     return dao.baseSelectByPrimaryKey( id );
}

/**
* 查询（根据ID 批量查询）
* @param idList 主键ID列表
* @return list
*/
public Integer baseSelectBathPrimaryKeys(List<WmsOrderRepairDetailed> idList ){
     return dao.baseSelectBathPrimaryKeys( idList );
}

/**
*修改 （匹配有值的字段）
* @param entity 补货单明细  只能修改状态为“已生成”的记录
* @return int
*/
@Transactional
public Integer baseUpdateByPrimaryKeySelective(WmsOrderRepairDetailed entity) throws SucessException, ServiceException {
     //首先获取未更改的原来明细的信息
     WmsOrderRepairDetailed wmsOrderRepairDetailed= dao.selectById(entity.getId());
    //修改数量时原库存的补货数量也随之改变（将原库存的补货数量减去补货明细的数量，然后在明细更改时再加上当前更改的数量）
     String kcid=wmsOrderRepairDetailed.getKcid();//库存id
     BigDecimal ybhsl=wmsOrderRepairDetailed.getBhsl();//原来明细的补货数量
     WmsStock wmsStock=wmsStockMapper.selectById(kcid);//库存对象
     BigDecimal kcxbhsl= new BigDecimal(wmsStock.getBhsl()).subtract(ybhsl);//库存的原补货数量减去明细的补货数量得到库存现补货数量
     BigDecimal xbhsl= kcxbhsl.add(entity.getBhsl());//将新的补货数量加在库存的补货数量上
     int num= dao.updateStock(kcid, String.valueOf(xbhsl));//修改库存数量
     Integer a=dao.baseUpdateByPrimaryKeySelective( entity);//修改补货明细
     if(a>0){
         throw new SucessException("补货明细修改成功");
     }else{
         throw new ServiceException("补货明细修改失败");
     }
}


}
